htaccess URL重写page.php?页面

时间:2016-03-14 10:55:31

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

我需要一个解决方案。需要重写两个网址:

/page.php?page=onama
/page.php?page=pravila

/onama    
/pravila

我尝试了许多不同的解决方案,但没有一个能够正常工作。但是,我确实像我说的那样重写了这些URL,但后来我的页面没有打开,所以我想这些都在细节中。

提示:

  • page.php文件位于根目录中 - 它包含if-else语句,其中包含/ pages /目录中的其他.php文件到page.php文件

  • onama.php和pravila.php文件位于/ pages /目录

修改

我想我很幸运:) 再试一次这个并且它有效,我不是.htaccess规则的专家,但这是我的问题的解决方案:


    RewriteCond %{QUERY_STRING} ^page=([^&\s]+)$
    RewriteRule ^(?:page\.php|)$ /%1? [R=301,L]

    RewriteCond %{QUERY_STRING} ^page=([^&\s]+)&page=([^&\s]+)$
    RewriteRule ^(?:page\.php|)$ /%1/%2? [R=301,L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^\s\/]+)/?$ page.php?page=$1&r [L,QSA]

编辑(新问题)

我正在尝试制定两条重写规则,但却无法让它们一起工作。 所以,问题在于规则1和规则2。

当规则1是.htaccess文件中的第一个时,它的工作方式就像一个魅力,但后来我遇到了规则2的问题 - 给我一个空白页面。

当RULE 2在.htaccess文件中的第一个时,规则1不起作用 - 给我404页。

在这两种情况下,URL都是SEF并且可以正常工作,但不会显示内容。

我的htaccess文件:

# RULE 1 - rewriting "/index.php?view=X" to "/X" 
RewriteEngine On
RewriteCond %{QUERY_STRING} ^view=([^&\s]+)$
RewriteRule ^(?:index\.php|)$ /%1? [R=301,L]

RewriteCond %{QUERY_STRING} ^view=([^&\s]+)$
RewriteRule ^(?:index\.php|)$ /%1/%2? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\s\/]+)/?$ index.php?view=$1&r [L,QSA]

# END OF RULE 1

# RULE 2 - rewriting "page.php?page=X" to "/X"

RewriteEngine On
RewriteCond %{QUERY_STRING} ^page=([^&\s]+)$
RewriteRule ^(?:page\.php|)$ /%1? [R=301,L]

RewriteCond %{QUERY_STRING} ^page=([^&\s]+)&page=([^&\s]+)$
RewriteRule ^(?:page\.php|)$ /%1/%2? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\s\/]+)/?$ page.php?page=$1&r [L,QSA]

# END OF RULE 2

#RULE 3 - rewriting "index.php" to "/"

RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteCond %{REQUEST_URI} !/system/.* [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]

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

#END OF RULE 3

1 个答案:

答案 0 :(得分:0)

RewriteEngine On
RewriteRule ^pravila$  "/page.php?page=pravila"
RewriteRule ^onama$    "/page.php?page=onama"

您的Apache需要在此目录中配置为允许覆盖才能使用.htaccess。