Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess 多参数友好URL重写规则_.htaccess_Mod Rewrite - Fatal编程技术网

.htaccess 多参数友好URL重写规则

.htaccess 多参数友好URL重写规则,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我需要有关重写多个参数的规则的帮助,如下所示: sitename.com/project.php?t=value1&a=value2 成为 sitename.com/project/value2/value1 但不知何故,我无法解决问题,页面显示500内部服务器错误 我的htaccess文件: DirectoryIndex index.php Options -Indexes <Files *htaccess> Deny from all </Files>

我需要有关重写多个参数的规则的帮助,如下所示:

sitename.com/project.php?t=value1&a=value2
成为

sitename.com/project/value2/value1
但不知何故,我无法解决问题,页面显示
500内部服务器错误

我的htaccess文件:

DirectoryIndex index.php
Options -Indexes

<Files *htaccess>
Deny from all
</Files>

<files page>
ForceType application/x-httpd-php
</files>

<IfModule mod_rewrite.c>
Options +SymLinksIfOwnerMatch
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

#resolve .php file for extensionless php urls
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]

RewriteRule ^cp/edit-agent/([^/\.]+)/?$ cp/edit-agent.php?name=$1 [L]
RewriteRule ^([^/\.]+)/?$ agent.php?name=$1 [L]

#rule to handle example.com/123/sys
RewriteRule ^project/([0-9]+)/([^/\.]+)/?$ project.php?a=$1&t=$2 [L,QSA]
</IfModule>
DirectoryIndex.php
选项-索引
全盘否定
ForceType应用程序/x-httpd-php
选项+符号链接所有者匹配
重新启动发动机
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_FILENAME}-F
#解析无扩展php URL的.php文件
重写cond%{REQUEST_FILENAME}\.php-f
重写规则^(.*)$$1.php[L]
重写规则^cp/edit agent/([^/\.]+)/?$cp/edit agent.php?name=$1[L]
重写规则^([^/\.]+)/?$agent.php?名称=$1[L]
#处理example.com/123/sys的规则
重写规则^project/([0-9]+)/([^/\.]+)/?$project.php?a=$1&t=$2[L,QSA]

请帮助。

您的规则看起来大部分都不错,但您有两个问题。第一个也是最明显的问题是,您有两个条件仅适用于第一条规则:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
仅适用于此规则:

#resolve .php file for extensionless php urls
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]
RewriteRule ^([^/\.]+)/?$ agent.php?name=$1 [L]
当它也需要应用于此规则时:

#resolve .php file for extensionless php urls
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]
RewriteRule ^([^/\.]+)/?$ agent.php?name=$1 [L]
条件只应用于紧跟其后的规则,因此需要复制它们

另一个问题并不明显,但这可能是导致500错误的原因,是以下情况:

RewriteCond %{REQUEST_FILENAME}\.php -f
问题是您有如下请求:
/project/123/abcd
,并且您有文件
/project.php
%{REQUEST\u FILENAME}
变量还考虑了路径信息,因此如果您将
.php
粘贴到末尾,它实际上会检查:
/project.php/123/abcd
并通过
-f
检查。但在规则本身中,您将它添加到末尾,因此:
project/123/abcd.php
。然后下一次,同样的条件再次通过,然后
.php
再次附加到末尾:
project/123/abcd.php.php
,从而无限循环

因此,您需要将规则更改为:

DirectoryIndex index.php
Options -Indexes -Mutiviews

<Files *htaccess>
Deny from all
</Files>

<files page>
ForceType application/x-httpd-php
</files>

<IfModule mod_rewrite.c>
Options +SymLinksIfOwnerMatch
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

#resolve .php file for extensionless php urls
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
RewriteRule ^(.*)$ $1.php [L]

RewriteRule ^cp/edit-agent/([^/\.]+)/?$ cp/edit-agent.php?name=$1 [L]

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

#rule to handle example.com/123/sys
RewriteRule ^project/([0-9]+)/([^/\.]+)/?$ project.php?a=$1&t=$2 [L,QSA]
</IfModule>
DirectoryIndex.php
选项-索引-多视图
全盘否定
ForceType应用程序/x-httpd-php
选项+符号链接所有者匹配
重新启动发动机
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_FILENAME}-F
#解析无扩展php URL的.php文件
重写cond%{DOCUMENT_ROOT}/$1\.php-f
重写规则^(.*)$$1.php[L]
重写规则^cp/edit agent/([^/\.]+)/?$cp/edit agent.php?name=$1[L]
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_FILENAME}-F
重写规则^([^/\.]+)/?$agent.php?名称=$1[L]
#处理example.com/123/sys的规则
重写规则^project/([0-9]+)/([^/\.]+)/?$project.php?a=$1&t=$2[L,QSA]