重定向请求并隐藏请求中的.php扩展名

时间:2014-01-14 17:32:07

标签: apache .htaccess mod-rewrite url-rewriting

我们已经开始更改我们的网站,我们一起使用旧网站和新网站。如果新网站上不存在某些内容,我们只需将其重定向到旧网站即可。 (这对用户来说是一个透明的过程。)

这就是.htaccess规则现在的样子:

RewriteEngine On 
RewriteBase /

RewriteCond %{http_host} ^domain.hu [NC]
RewriteCond %{http_host} !^domain.hu.data18.websupport.sk$ [NC]
RewriteRule ^(.*)$ http://www.domain.hu/$1 [R=301,NC,L] 

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/static-old%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/static-old%{REQUEST_URI} -d
RewriteRule ^(.*)$ /static-old/$1 [QSA] 
RewriteRule ^(.*)\.html$ $1.php [L,R=301,QSA]

因此,如果我们在主目录中找不到该文件,但我们在旧目录中找到它,我们将使用旧文件而不是404.如果请求的文件具有html扩展名,那么我们在内部重写它php,因为我们刚才改变了这个。

我想要隐藏php扩展(因此html也会隐藏)所以如果请求的uri是/something.php或/something.html那么只向用户显示/某些东西。但是,如果我像这样编辑.htacces:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/static-old-from-seocms%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/static-old-from-seocms%{REQUEST_URI} -d
RewriteCond %{REQUEST_URI} ^(.*?)\.php[\s?] [NC]
RewriteRule ^/%1/ [R=301,L,NE]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/static-old-from-seocms%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/static-old-from-seocms%{REQUEST_URI} -d
%{REQUEST_URI} !\.(.*)$ 
RewriteRule ^(.*)$ $1.php [L,R=301,QSA]
RewriteRule ^(.*)$ /static-old-from-seocms/$1 [QSA,L] 

我将收到500内部服务器错误,.htaccess解析失败。

我认为这个脚本将检查所请求的文件是否具有php扩展并且在主目录中不存在然后将其重定向到没有php扩展的相同地址,之后脚本将检查所请求的uri是否不存在于主目录,没有扩展名,然后在内部写一个PHP扩展名。

1 个答案:

答案 0 :(得分:1)

试试这个.htaccess:

RewriteEngine On 
RewriteBase /

RewriteCond %{http_host} ^domain\.hu [NC]
RewriteCond %{http_host} !^domain\.hu\.data18\.websupport\.sk$ [NC]
RewriteRule ^(.*)$ http://www.domain.hu/$1 [R=301,L]

RewriteCond %{THE_REQUEST} \s/+(.+?)\.(php|html)[\s?] [NC]
RewriteRule ^ /%1 [R=301,L,NE]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^.]+)/?$ /$1.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/static-old%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/static-old%{REQUEST_URI} -d
RewriteRule ^(.+)$ /static-old/$1 [L]