Php Htaccess隐藏文件扩展名并保持$\u GET参数为Access

Php Htaccess隐藏文件扩展名并保持$\u GET参数为Access,php,.htaccess,mod-rewrite,Php,.htaccess,Mod Rewrite,首先,我有两个文件,分别是index.php和main.php,在这两个文件中,我已经包含了$\u GET参数,因此可以使用这个参数访问它 index.php?page=login index.php?page=register&ref=1 main.php?page=member main.php?page=member&edit main.php?page=logout 通过使用.htaccess,我想删除.php扩展名,但我想保留参数并使用新的url访问它 我做了这个密

首先,我有两个文件,分别是index.php和main.php,在这两个文件中,我已经包含了$\u GET参数,因此可以使用这个参数访问它

index.php?page=login
index.php?page=register&ref=1 
main.php?page=member
main.php?page=member&edit
main.php?page=logout
通过使用.htaccess,我想删除.php扩展名,但我想保留参数并使用新的url访问它

我做了这个密码

RewriteEngine On
RewriteBase /

## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=302,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php?\?p=([^\s]+)? [NC]
RewriteRule ^ /%1? [R=302,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php?\?p=([^\s]+)&[A-Z]=([^\s]+) [NC]
RewriteRule ^ /%1?/%2? [R=302,L,NE]

# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L]

RewriteRule ^([a-zA-Z0-9_-]+)/?$ index.php?p=$1  [L,QSA]
RewriteRule ^([a-zA-Z0-9_-]+)/?$ main.php?p=$1  [L,QSA]
RewriteRule ^([a-zA-Z0-9_-]+)/?$ index.php?p=$1  [L,QSA]
RewriteRule ^([a-zA-Z0-9_-]+)/?$ main.php?p=$1  [L,QSA]
是的,我可以只使用和main.php访问index.php,但是请看一下这段代码

RewriteEngine On
RewriteBase /

## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=302,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php?\?p=([^\s]+)? [NC]
RewriteRule ^ /%1? [R=302,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php?\?p=([^\s]+)&[A-Z]=([^\s]+) [NC]
RewriteRule ^ /%1?/%2? [R=302,L,NE]

# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L]

RewriteRule ^([a-zA-Z0-9_-]+)/?$ index.php?p=$1  [L,QSA]
RewriteRule ^([a-zA-Z0-9_-]+)/?$ main.php?p=$1  [L,QSA]
RewriteRule ^([a-zA-Z0-9_-]+)/?$ index.php?p=$1  [L,QSA]
RewriteRule ^([a-zA-Z0-9_-]+)/?$ main.php?p=$1  [L,QSA]
当“index.php”规则位于顶部时,我可以访问或(index.php中的参数),但不能访问或(main.php中的参数)

我想要的是通过使用参数或不使用参数来访问所有文件。
谢谢

以下是要使用的代码

RewriteRule ^register/?$ index.php?p=register  [L]
RewriteRule ^login/?$ index.php?p=login  [L]
RewriteRule ^member/?$ main.php?p=member  [L]
RewriteRule ^logout/?$ main.php?p=logout  [L]

但是,是的,参数可以被某个东西或什么东西访问。只是想了解更多。

你不可能有两种完全相同的模式,并期望两者都能起作用。如果它们完全相同,Apache如何知道您想要哪个匹配?应该将
/foo
重定向到哪里?要index.php或main.php?有没有其他htaccess规则的建议?或者给url加一个斜杠,如果你硬编码一个这样的前缀,那么你只需要将你的模式改为:
^index/([a-zA-Z0-9.-]+)/?$index.php?p=$1
^main/([a-zA-Z0-9.-]+)/?$main.php?p=$1
。就个人而言,我更喜欢用路由器来处理URL。然后它是应用程序的一部分,而不是web服务器配置的一部分。有没有关于使用路由器的参考资料?只要谷歌“php路由器”,你就会找到很多库和示例。