挣扎着“干净的网址”

时间:2013-06-06 09:45:31

标签: .htaccess

经过几个小时的研究这个网站(和谷歌),我已经决定我需要帮助解决这个问题。我在我的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]

2 个答案:

答案 0 :(得分:0)

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

我更喜欢无扩展名的网址,因为它出于某种奇怪的原因我想切换技术堆栈(即转到Rails)我在网址的末尾没有使用“.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]

答案 1 :(得分: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]