2013-06-06 72 views
0

经过多小时的研究这个网站(和谷歌),我决定我需要帮助,我遇到了这个问题。我在我的htaccess文件中使用了一段代码,该代码允许通过包含.php扩展名(如www.mysite.com/about.php)访问url,从而完全不使用斜杠(像这个www.mysite.com/about),或者在最后添加一个斜杠代替扩展名(如www.mysite.com/about/)。挣扎着“干净的网址”

让零件精美地工作。然而,在页面加载后,地址栏中是否仍然显示.php扩展名,无论用户输入了与否。到目前为止,我对它现在所做的事情非常满意,但我真的希望能够隐藏扩展名,甚至可以在最后加上一个斜线,并且因为某些原因,我没有做什么在这方面工作。希望这有一些意义。

我目前在我的htaccess文件中有这个。

RewriteEngine on 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME}\.php -f 
    RewriteRule ^([^/]+)/$ http://mysite.com/test-server/$1.php 

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ 
    RewriteRule (.*)$ http://mysite.com/test-server/$1/ [R=301,L] 

回答

0

这实际上是一种糟糕的方法,因为您的内容可以通过多个URL访问。要么强制扩展或不要。

我更喜欢无扩展的URL,因为我想切换技术堆栈(即Rails)的一些离奇原因。我没有在我的URL末尾卡住“.php”。

为了达到这个目的,你可以在最后重写一个带有“.php”脚本的扩展请求。在下面的的.htaccess文件地方:

RewriteEngine on 

# redirect to extension-less URL if requested 
RewriteCond %{THE_REQUEST} ^[A-Z]+\s.+\.php\sHTTP/.+ 
RewriteRule ^(.+)\.php $1 [R=301,L] 
+0

由于某些原因,这对我不起作用,尽管我可能弄错了文件扩展名部分。我试图让我的测试网站文件夹工作。 – bobs

+0

您的测试网站文件夹在哪里,您的**。htaccess **文件中是否有其他'RewriteRules'? –

+0

它遵循我在示例代码中使用的结构。我甚至在我的投资组合网站的根级尝试过它,但它仍然无法正常工作。 – bobs

0

我还发现,在去除扩展为我的作品非常好这段代码,但我只带了它在根一级工作至今。我希望能够对我的测试网站中的不同目录进行修改,因为url结构对于此特定项目非常重要。但是,当我这样做时,只有错误。

AddType text/x-component .htc 
RewriteEngine On 
RewriteBase/
# remove .php; use THE_REQUEST to prevent infinite loops 
RewriteCond %{THE_REQUEST} ^GET\ (.*)\.php\ HTTP 
RewriteRule (.*)\.php$ $1 [R=301] 
# remove index 
RewriteRule (.*)/index$ $1/ [R=301] 
# remove slash if not directory 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} /$ 
RewriteRule (.*)/ $1 [R=301] 
# add .php to access file, but don't redirect 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteCond %{REQUEST_URI} !/$ 
RewriteRule (.*) $1\.php [L]